home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 4 / Amiga Tools 4.iso / tools / netzwerk / pronet / pronet20.lha / ProNET / source / filesystem / pronet-server.s < prev   
Text File  |  1995-06-22  |  25KB  |  1,226 lines

  1. ;: > pronet-server.s
  2. ;:
  3. ;: ©1994-1995 by Michael Krause
  4. ;:
  5. ;: 16.07.1994    started..
  6. ;: 24-01-95 if a port number occurs again while ADDNEWHANDLER, we assume that
  7. ;:          other side has reset, so we clear all our data and start from the
  8. ;:        beginning!! v34.1
  9.  
  10. ;: 01-04-95 SegList splitting v34.2
  11.  
  12. ;: 14-04-95 MsgRemDisk (or similar??) won't cause the 50frames-Delay.
  13. ;:        dann noch ACT_READ bug-gefixt??
  14. ;: 15-04-95 read und write geben statt NO_FREE_STORE jetzt OBJECT_TOO_LARGE
  15. ;:        zurück v34.3
  16.  
  17. ;: 17-04-95 READ-Transfer umgebaut v34.4
  18. ;: 29-04-95 EXAMINE-Packets neu programmiert v34.5
  19.  
  20. ;: 08-05-95 Statt des Devicenamens wird jetzt Unitnummer
  21. ;:        vom CLI-String übernommen v34.6
  22.  
  23. ;: 12-05-95 MsgRemDisk didn't set d7... v34.7
  24.  
  25. ;: 15-06-95 SegList splitting removed. v34.8
  26.  
  27. DEBUG        equ    0
  28.  
  29. ;++ bei aCT_NEWHANDLER nach CreateStdPacket prüfen -> freemem
  30.  
  31.         include    "exec/exec.i"
  32.         include    "dos/dos.i"
  33.         include    "dos/dosextens.i"
  34.         include    "dos/filehandler.i"
  35.         include    "devices/input.i"
  36.         include    "devices/inputevent.i"
  37.         include    "A:ProNET/include/devices/pronet.i"
  38.         include    "A:OSmacros.i"
  39.  
  40.         include    "A:ProNET/source/network.i"
  41.  
  42.         include    "exec_lib.i"
  43.         include    "dos_lib.i"
  44.         include    "intuition_lib.i"
  45.  
  46.           STRUCTURE    PNSHandlerNode,0
  47.         APTR    phn_next        ;Verkettung
  48.         UWORD    phn_port        ;dazugehörige Portnummer
  49.         APTR    phn_handlerID        ;ProcessID des Handlers
  50.         APTR    phn_packet        ;StandardPKT zur Handlerkommunikation
  51.                     ; packet ist *sp_Pkt, nicht *sp_Msg!!
  52.         APTR    phn_devnode    ;DevNode des Handlers
  53.         APTR    phn_volnode    ;aktuelle Volume
  54.         APTR    phn_dlbuf    ;DownLoad-Buffer
  55.         APTR    phn_dlbufpt    ;aktuelle Position
  56.         ULONG    phn_dlbytes    ;wieviel Bytes noch ?? 0 = nix
  57.         LABEL    phn_SIZEOF
  58.  
  59.         section    startup,code
  60.  
  61. j        cmp.w    #2,d0        * UNIT as Argument?
  62.         bls.s    .cont
  63.         jsr    dec2long
  64.         move.l    d1,unit
  65.  
  66. .cont
  67.  
  68.     IFNE    DEBUG
  69.     bsr    dinit
  70.     ENDC
  71.  
  72.         move.l    4.w,a6
  73.         move.l    ThisTask(a6),ourtask
  74.         lea    dosname(pc),a1
  75.         moveq    #33,d0
  76.         jsr    -552(a6)
  77.         move.l    d0,dosbase
  78.         beq.s    nodos
  79.  
  80.         move.l    ourtask(pc),a0
  81.         move.l    #-1,pr_WindowPtr(a0)
  82.  
  83.         bsr    StartInputHandler
  84.  
  85.         bsr    startpronet
  86.         tst.w    d0
  87.         bne.s    nopronet
  88.  
  89.         bsr    startmessage
  90.         bra    Wait4Message
  91.  
  92. nopronet    move.l    dosbase(pc),a1
  93.         move.l    4.w,a6
  94.         jsr    -414(a6)
  95. nodos
  96.     IFNE    DEBUG
  97.     bsr    dexit
  98.     ENDC
  99.         moveq    #20,d0
  100.         rts
  101.  
  102.         dc.b    "$VER: pronet-server 34.9 (18-06-95)",13,10,0
  103.         even
  104.  
  105. startpronet    moveq    #pnr_Size,d0
  106.         bsr    GetIORequest
  107.         move.l    d0,pronetio
  108.         beq    spnoioreq
  109.         bsr    CreatePort
  110.         move.l    d0,pronetmsgport
  111.         beq    spnomsgport
  112.         lea    pronetname(pc),a0
  113.         move.l    unit(pc),d0
  114.         moveq    #0,d1
  115.         move.l    pronetio(pc),a1
  116.         move.w    #0,pnr_NetSourcePort(a1)
  117.         move.l    pronetmsgport(pc),pnr_MsgPort(a1)
  118.         move.l    4.w,a6
  119.         LIBCALL    OpenDevice
  120.         tst.l    d0
  121.         bne.s    spnodev
  122.         move.l    pronetio(pc),a1
  123.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  124.         clr.l    pnr_Length2(a1)
  125.         move.l    pronetmsgport(pc),a0
  126.         move.b    MP_SIGBIT(a0),Signal.pronet
  127.         moveq    #0,d0
  128.         rts
  129.  
  130. spnodev        move.l    pronetmsgport(pc),a0
  131.         bsr    DeletePort
  132. spnomsgport    move.l    pronetio(pc),a0
  133.         bsr    FreeIORequest
  134. spnoioreq    moveq    #-1,d0
  135.         rts
  136.  
  137. ; -- InputHandler zum Handlen der DISKREMOVED/INSERTED-Messages hochfahren
  138. ; -- und entsprechende Signalbits für's Hauptprogramm eintragen.
  139. StartInputHandler
  140.         move.l    4.w,a6
  141.         moveq    #-1,d0
  142.         LIBCALL    AllocSignal
  143.         move.b    d0,Signal.diskins
  144.         moveq    #-1,d0
  145.         LIBCALL    AllocSignal
  146.         move.b    d0,Signal.diskrem
  147.  
  148.         moveq    #IOSTD_SIZE,d0
  149.         bsr    GetIORequest
  150.         move.l    d0,a3
  151.         move.l    a3,inputio
  152.         lea    inputname(pc),a0
  153.         moveq    #0,d0
  154.         moveq    #0,d1
  155.         move.l    a3,a1
  156.         move.l    4.w,a6
  157.         LIBCALL    OpenDevice
  158.  
  159.         move.l    a3,a1
  160.         move.w    #IND_ADDHANDLER,IO_COMMAND(a1)
  161.         move.l    #.int,IO_DATA(a1)
  162.         LIBCALL    DoIO
  163.         rts
  164. .int        dc.l    0,0
  165.         dc.b    NT_INTERRUPT,100
  166.         dc.l    .intname,0,InputHandlerRout
  167. .intname    dc.b    "ProNET Server",0
  168.         even
  169.  
  170. startmessage    move.l    dosbase(pc),a6
  171.         LIBCALL    Output
  172.         move.l    d0,d1
  173.         move.l    #starttext,d2
  174.         move.l    #starttextl,d3
  175.         LIBCALL    Write
  176.         rts
  177.  
  178. w4mquitflag    dc.w    0
  179. Wait4Message    tst.w    w4mquitflag
  180.         bne    .quit
  181.         clr.w    w4mquitflag
  182.  
  183.         lea    Signals(pc),a3    * auf die Messages
  184.         moveq    #0,d0        * an allen möglichen
  185.         moveq    #numports-1,d1    * Ports warten
  186. .loop1        move.b    (a3),d2
  187.         bmi.s    .0
  188.         bset    d2,d0
  189. .0        addq.w    #6,a3
  190.         dbra    d1,.loop1
  191.     IFNE    DEBUG
  192.     lea    dwaitt(pc),a0
  193.     bsr    dtype
  194.     ENDC
  195.         move.l    4.w,a6
  196.         LIBCALL    Wait
  197.                     * entsprechende Routinen
  198.         moveq    #31,d7        * aufrufen
  199. .00        rol.l    #1,d0
  200.         bcc.s    .notthisbit
  201.         lea    Signals(pc),a3
  202.         moveq    #numports-1,d4
  203. .01        cmp.b    (a3),d7
  204.         bne.s    .notthisport
  205.         movem.l    d0/d4/d7/a3,-(sp)
  206.         move.l    2(a3),a3
  207.         jsr    (a3)
  208.         movem.l    (sp)+,d0/d4/d7/a3
  209. .notthisport    addq.w    #6,a3
  210.         dbra    d4,.01
  211. .notthisbit    dbra    d7,.00    
  212.  
  213.         bra    Wait4Message
  214. .quit        rts
  215. Signals:
  216. Signal.pronet    dc.b    -1,0            ;Signalbit
  217.         dc.l    GetProNETMsg        ;entsprechende Routine
  218. Signal.diskins    dc.b    -1,0
  219.         dc.l    MsgDiskIns
  220. Signal.diskrem    dc.b    -1,0
  221.         dc.l    MsgDiskRem
  222. numports    equ    3
  223.  
  224. InputHandlerRout
  225.         movem.l    a0/a1/a6,-(sp)
  226.         move.l    a0,d0
  227.         beq.s    .ende
  228.         move.l    4.w,a6
  229. .1        move.b    ie_Class(a0),d0
  230.         cmp.b    #IECLASS_DISKREMOVED,d0
  231.         beq.s    .diskrem
  232.         cmp.b    #IECLASS_DISKINSERTED,d0
  233.         beq.s    .diskins
  234. .next        move.l    (a0),a0
  235.         move.l    a0,d0
  236.         bne.s    .1
  237. .ende        movem.l    (sp)+,a0/a1/a6
  238.         move.l    a0,d0
  239.         rts
  240. .diskrem    move.l    ourtask(pc),a1
  241.         moveq    #0,d0
  242.         move.b    Signal.diskrem(pc),d1
  243.         bset    d1,d0
  244.         LIBCALL    Signal
  245.         bra.s    .next
  246. .diskins    move.l    ourtask(pc),a1
  247.         moveq    #0,d0
  248.         move.b    Signal.diskins(pc),d1
  249.         bset    d1,d0
  250.         LIBCALL    Signal
  251.         bra.s    .next
  252.  
  253. ; -- Eine Disk wurde neu eingelegt - hier wird getestet, ob es eine
  254. ; -- von unseren Gast-Handlern ist, wenn ja, werden entsprechende
  255. ; -- Maßnahmen eingeleitet...
  256. MsgDiskIns
  257.         IFNE    DEBUG
  258.         move.w    #$0f0,$dff180
  259.         ENDC
  260.         move.l    #ACTION_DISKINS,d6
  261.         moveq    #2,d7
  262.         bra.s    msginsrem_sub
  263.  
  264. ; -- Eine Disk wurde entnommen - siehe 'MsgDiskIns'
  265. MsgDiskRem
  266.         IFNE    DEBUG
  267.         move.w    #$f00,$dff180
  268.         ENDC
  269.         move.l    #ACTION_DISKREM,d6
  270.         moveq    #2,d7
  271.         bra.s    msginsrem_nodel
  272.  
  273. msginsrem_sub    subq.w    #1,d7
  274.         bpl.s    .0
  275.         rts
  276. .0        move.l    dosbase(pc),a6
  277.         moveq    #50,d1
  278.         LIBCALL    Delay
  279.  
  280. msginsrem_nodel    lea    HandlerList(pc),a2    ;in d6 ACTION_DISKINS/REM
  281. .loop        move.l    (a2),d0
  282.         beq.s    msginsrem_sub
  283.         move.l    d0,a2
  284.         move.l    phn_handlerID(a2),a0
  285.         bsr    FindVolume
  286.         cmp.l    phn_volnode(a2),d0
  287.         beq.s    .loop
  288.         move.l    d0,a5
  289.         move.l    d0,phn_volnode(a2)    * Disk wurde gewechselt !!
  290.  
  291.         move.l    phn_dlbytes(a2),d0    ;es wird gerade downgeloadet
  292.         bne.s    .ende            ;(ne Msg würde den Betrieb
  293.                         ;stören !!)
  294.         move.l    pronetio(pc),a4        * Message an den Handler
  295.         move.w    phn_port(a2),pnr_NetDestPort(a4)    * schicken..
  296.         lea    sendbuf,a3
  297.         move.l    d6,(a3)+
  298.         cmp.l    #ACTION_DISKREM,d6
  299.         beq.s    .nocopy
  300.         move.l    a5,d0
  301.         lsr.l    #2,d0
  302.         move.l    d0,(a3)+
  303.         lea    dol_VolumeDate(a5),a0
  304.         move.l    (a0)+,(a3)+
  305.         move.l    (a0)+,(a3)+
  306.         move.l    (a0)+,(a3)+    ;VolumeDate und Name
  307.         move.l    dol_Name(a5),a0    ;müssen kopiert werden..
  308.         add.l    a0,a0
  309.         add.l    a0,a0
  310.         moveq    #0,d0
  311.         move.b    (a0),d0
  312.         addq.w    #1,d0
  313. .copyname    move.b    (a0)+,(a3)+
  314.         dbra    d0,.copyname
  315. .nocopy        lea    sendbuf,a0
  316.         move.l    a0,pnr_Data1(a4)
  317.         sub.l    a0,a3
  318.         move.l    a3,pnr_Length1(a4)
  319.         move.l    4.w,a6
  320.         move.l    a4,a1
  321.         LIBCALL    DoIO
  322. .ende        rts
  323.  
  324. GetProNETMsg    move.l    4.w,a6
  325.         move.l    pronetmsgport(pc),a0
  326.         LIBCALL    GetMsg
  327.         tst.l    d0
  328.         beq    .ende
  329.         move.l    d0,actpronetmsg
  330.         move.l    d0,a2
  331.         lea    MN_SIZE(a2),a2
  332.         move.w    (a2)+,d2    ;[d2] Sourceport [a2] Data
  333.         move.l    (a2)+,d0    ;[d0] dp_Action
  334.     IFNE    DEBUG
  335.     bsr    dtypedec
  336.     bsr    dcr
  337.     ENDC
  338.         lea    sendbuf+12,a3    ;[a3] sendbuf+12
  339.         move.l    d0,-12(a3)
  340.         move.l    pronetio(pc),a4    ;[a4] PNRequest
  341.         move.w    d2,pnr_NetDestPort(a4)
  342.         lea    HandlerList(pc),a5
  343. .findnodeloop    move.l    (a5),a5
  344.         move.l    a5,d1
  345.         beq.s    .findrout
  346.         cmp.w    phn_port(a5),d2
  347.         bne.s    .findnodeloop
  348.         move.l    phn_dlbytes(a5),d7
  349.         beq.s    .nodown
  350.         lea    ACT_WRITEdownload(pc),a1
  351.         bra.s    .callit
  352. .nodown        move.l    phn_packet(a5),a4
  353.         move.l    d0,dp_Action(a4)
  354. .findrout    lea    at(pc),a0
  355.         moveq    #atl-1,d1
  356. .findroutloop    cmp.l    (a0),d0
  357.         bcs.s    .next
  358.         cmp.l    4(a0),d0
  359.         bls.s    .jsrroutine
  360. .next        lea    12(a0),a0
  361.         dbra    d1,.findroutloop
  362.         bsr    ACT_NIL
  363.         bra.s    .reply
  364. .jsrroutine    sub.l    (a0),d0
  365.         add.l    d0,d0
  366.         move.l    8(a0),a0
  367.         lea    at(pc),a1
  368.         add.w    (a0,d0.l),a1
  369. .callit        jsr    (a1)
  370. .reply        move.l    actpronetmsg(pc),a1
  371.         move.l    4.w,a6
  372.         LIBCALL    ReplyMsg
  373.         bra    GetProNETMsg
  374. .ende        rts
  375.  
  376.         cnop    0,4
  377. at        ;dc.l    lowerbound,upperbound,tableaddress
  378.         dc.l    7,34,actiontable1
  379.         dc.l    40,40,actiontable2
  380.         dc.l    82,82,actiontable3
  381.         dc.l    87,87,actiontable4
  382.         dc.l    1004,1008,actiontable5
  383.         dc.l    1020,1034,actiontable6
  384.         dc.l    2008,2009,actiontable7
  385.         dc.l    4097,4098,actiontable8
  386.         dc.l    4200,4200,actiontable9
  387.         dc.l    19941994,19941994,actiontable10
  388.         dc.l    19941998,19941999,actiontable11
  389. atl        equ    (*-at)/12
  390.  
  391.         cnop    0,4
  392. actiontable1    dc.w    ACT_CURRENT_VOLUME-at,ACT_LOCATE_OBJECT-at,ACT_RENAME_DISK-at,ACT_NIL-at,ACT_NIL-at
  393.         dc.w    ACT_NIL-at,ACT_NIL-at,ACT_NIL-at,ACT_FREE_LOCK-at,ACT_DELETE_OBJECT-at
  394.         dc.w    ACT_RENAME_OBJECT-at,ACT_MORE_CACHE-at,ACT_COPY_DIR-at,ACT_NIL-at
  395.         dc.w    ACT_SET_PROTECT-at,ACT_CREATE_DIR-at,ACT_EXAMINE_OBJECT-at,ACT_EXAMINE_OBJECT-at
  396.         dc.w    ACT_DISK_INFO-at,ACT_INFO-at,ACT_FLUSH-at,ACT_SET_COMMENT-at
  397.         dc.w    ACT_PARENT-at,ACT_NIL-at,ACT_INHIBIT-at,ACT_NIL-at
  398.         dc.w    ACT_NIL-at,ACT_SET_DATE-at
  399. actiontable2    dc.w    ACT_SAME_LOCK-at
  400. actiontable3    dc.w    ACT_READ-at
  401. actiontable4    dc.w    ACT_WRITE-at
  402. actiontable5    dc.w    ACT_FINDxxx-at
  403.         dc.w    ACT_FINDxxx-at,ACT_FINDxxx-at,ACT_END-at,ACT_SEEK-at
  404. actiontable6    dc.w    ACT_FORMAT-at,ACT_MAKE_LINK-at,ACT_SET_FILE_SIZE-at,ACT_WRITE_PROTECT-at
  405.         dc.w    ACT_READ_LINK-at,ACT_NIL-at,ACT_FH_FROM_LOCK-at,ACT_NIL-at
  406.         dc.w    ACT_CHANGE_MODE-at,ACT_NIL-at,ACT_COPY_DIR_FH-at,ACT_PARENT_FH-at
  407.         dc.w    ACT_NIL-at,ACT_NIL-at,ACT_EXAMINE_FH-at
  408. actiontable7    dc.w    ACT_LOCK_RECORD-at,ACT_FREE_RECORD-at
  409. actiontable8    dc.w    ACT_ADD_NOTIFY-at,ACT_REMOVE_NOTIFY-at
  410. actiontable9    dc.w    ACT_SERIALIZE_DISK-at
  411. actiontable10    dc.w    ACT_NEWHANDLER-at
  412. actiontable11    dc.w    ACT_RUN-at,ACT_PAGE-at
  413.  
  414.         cnop    0,4
  415. ** The routines will be called with the registers containing following:
  416. ** a6 Execbase
  417. ** a5 PNSHandlerNode für den entspr. Port oder NULL (packet->dp_action is ready !!)
  418. ** a4 phn_packet
  419. ** a3 sendbuf+12 (sendbuf filled with dp_Action,{res1},{res2})
  420. ** a2 received data (after dp_Action)
  421. ** d2 Sourceport
  422.  
  423. ACT_NIL
  424.         move.l    #DOSFALSE,d0
  425.         move.l    #ERROR_ACTION_NOT_KNOWN,d1
  426.         bra    answerpacket
  427.  
  428. ACT_LOCATE_OBJECT
  429.         move.l    (a2)+,dp_Arg1(a4)
  430.         move.l    (a2)+,dp_Arg3(a4)
  431.         addq.w    #2,a2    ;frei, wegen LW-align..
  432.         move.l    a2,d0
  433.         lsr.l    #2,d0
  434.         move.l    d0,dp_Arg2(a4)
  435.         bsr    dopacket
  436.         tst.l    d0
  437.         beq.s    .return
  438.         move.l    d0,a0
  439.         add.l    a0,a0
  440.         add.l    a0,a0
  441.         move.l    fl_Volume(a0),(a3)+
  442. .return        bra    answerpacket
  443.  
  444. ACT_RENAME_DISK
  445.         addq.w    #2,a2
  446.         move.l    a2,d0
  447.         lsr.l    #2,d0
  448.         move.l    d0,dp_Arg1(a4)
  449.         bsr    dopacket
  450.         bra    answerpacket
  451.  
  452. ACT_FREE_LOCK
  453.         move.l    (a2)+,dp_Arg1(a4)
  454.         bra    dopacket
  455.  
  456. ACT_DELETE_OBJECT
  457.         move.l    (a2)+,dp_Arg1(a4)
  458.         addq.w    #2,a2
  459.         move.l    a2,d0
  460.         lsr.l    #2,d0
  461.         move.l    d0,dp_Arg2(a4)
  462.         bsr    dopacket
  463.         bra    answerpacket
  464.  
  465. ACT_RENAME_OBJECT
  466.         move.l    (a2)+,dp_Arg1(a4)
  467.         move.l    (a2)+,dp_Arg3(a4)
  468.         addq.w    #2,a2
  469.         lea    256(a2),a0
  470.         move.l    a2,d0
  471.         move.l    a0,d1
  472.         lsr.l    #2,d0
  473.         lsr.l    #2,d1
  474.         move.l    d0,dp_Arg2(a4)
  475.         move.l    d1,dp_Arg4(a4)
  476.         bsr    dopacket
  477.         bra    answerpacket
  478.  
  479. ACT_MORE_CACHE
  480.         move.l    (a2),dp_Arg1(a4)
  481.         bsr    dopacket
  482.         bra    answerpacket
  483.  
  484. ACT_COPY_DIR
  485.         move.l    (a2),dp_Arg1(a4)
  486.         bsr    dopacket
  487.         tst.l    d0
  488.         beq.s    .return
  489.         move.l    d0,a0
  490.         add.l    a0,a0
  491.         add.l    a0,a0
  492.         move.l    fl_Volume(a0),(a3)+
  493.         move.l    fl_Access(a0),(a3)+
  494. .return        bra    answerpacket
  495.  
  496. ACT_SET_PROTECT
  497.         move.l    (a2)+,dp_Arg2(a4)
  498.         move.l    (a2)+,dp_Arg4(a4)
  499.         addq.w    #2,a2
  500.         move.l    a2,d0
  501.         lsr.l    #2,d0
  502.         move.l    d0,dp_Arg3(a4)
  503.         bsr    dopacket
  504.         bra    answerpacket
  505.  
  506. ACT_CREATE_DIR
  507.         move.l    (a2)+,dp_Arg1(a4)
  508.         addq.w    #2,a2
  509.         move.l    a2,d0
  510.         lsr.l    #2,d0
  511.         move.l    d0,dp_Arg2(a4)
  512.         bsr    dopacket
  513.         tst.l    d0
  514.         beq.s    .return
  515.         move.l    d0,a0
  516.         add.l    a0,a0
  517.         add.l    a0,a0
  518.         move.l    fl_Volume(a0),(a3)+
  519.         move.l    fl_Access(a0),(a3)+
  520. .return        bra    answerpacket
  521.  
  522. ACT_EXAMINE_OBJECT    ;EXAMINEs neu 29-04-95
  523.         move.l    (a2)+,dp_Arg1(a4)
  524. act_ex_entry    lea    workfib,a1
  525.         move.l    a1,d0
  526.         lsr.l    #2,d0
  527.         move.l    d0,dp_Arg2(a4)
  528.         move.l    (a2)+,(a1)+    ;fib_DiskKey
  529.         addq.l    #4,a1
  530.         move.w    #32/4-1,d0
  531. .copyname    move.l    (a2)+,(a1)+
  532.         dbra    d0,.copyname    ;fib_FileName
  533.  
  534.         bsr    dopacket
  535.  
  536.         lea    workfib,a1    ;return whole FIB
  537.         move.w    #(fib_SIZEOF)/4-1,d0
  538. .copyfib    move.l    (a1)+,(a3)+
  539.         dbra    d0,.copyfib
  540.  
  541.         movem.l    dp_Res1(a4),d0/d1
  542.         bra    answerpacket
  543.  
  544. ACT_EXAMINE_FH
  545.         GETBPTR    (a2)+,a0
  546.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  547.         bra.s    act_ex_entry
  548.  
  549. ACT_FLUSH
  550.         bsr    dopacket
  551.         bra    answerpacket
  552.  
  553. ACT_SET_COMMENT
  554.         move.l    (a2)+,dp_Arg2(a4)
  555.         move.l    a2,d0
  556.         move.l    a2,d1
  557.         addq.l    #2,d0
  558.         add.l    #82,d1
  559.         lsr.l    #2,d0
  560.         lsr.l    #2,d1
  561.         move.l    d1,dp_Arg3(a4)
  562.         move.l    d0,dp_Arg4(a4)
  563.         bsr    dopacket
  564.         bra    answerpacket
  565.  
  566. ACT_PARENT
  567.         bra    ACT_COPY_DIR
  568.  
  569. ACT_SET_DATE
  570.         move.l    (a2)+,dp_Arg2(a4)
  571.         move.l    a2,dp_Arg4(a4)
  572.         lea    14(a2),a2
  573.         move.l    a2,d0
  574.         lsr.l    #2,d0
  575.         move.l    d0,dp_Arg3(a4)
  576.         bsr    dopacket
  577.         bra    answerpacket
  578.  
  579. ACT_SAME_LOCK
  580.         move.l    (a2)+,dp_Arg1(a4)
  581.         move.l    (a2),dp_Arg2(a4)
  582.         bsr    dopacket
  583.         tst.w    d0
  584.         bne.s    .return
  585.         cmp.l    #ERROR_ACTION_NOT_KNOWN,d1
  586.         bne.s    .return
  587.         moveq    #DOSFALSE,d0
  588.         moveq    #0,d1
  589.         GETBPTR    -4(a2),a0    ;Locks von Hand vergleichen..
  590.         GETBPTR    (a2),a1
  591.         move.l    fl_Volume(a0),d2
  592.         cmp.l    fl_Volume(a1),d2
  593.         bne.s    .return
  594.         move.l    fl_Key(a0),d2
  595.         cmp.l    fl_Key(a1),d2
  596.         bne.s    .return
  597.         moveq    #DOSTRUE,d0
  598. .return        bra    answerpacket
  599.  
  600. ACT_READ    ** New routine on 17-04-95
  601.         GETBPTR    (a2)+,a0
  602.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  603.         move.l    (a2),d7        ;Length of the read packet
  604.  
  605.         moveq    #0,d6        ;NumBytes already read
  606.  
  607.         move.l    pronetio(pc),a2
  608.         lea    sendbuf,a3
  609.         move.l    a3,pnr_Data1(a2)
  610.  
  611. .loop        move.l    #MAXPACKETSIZE,d0    *Read A Bunch of Bytes
  612.         cmp.l    d0,d7
  613.         bcc.s    .lenok
  614.         move.l    d7,d0
  615. .lenok        move.l    d0,dp_Arg3(a4)
  616.         lea    12(a3),a0
  617.         move.l    a0,dp_Arg2(a4)
  618.         bsr    dopacket
  619.         tst.l    d0            *Error?
  620.         bmi.s    .ERROR
  621.  
  622.         move.l    d0,4(a3)        *Send packet including
  623.         add.l    #12,d0            *num bytes now read
  624.         move.l    d0,pnr_Length1(a2)
  625.         move.l    a2,a1
  626.         LIBCALL    DoIO
  627.  
  628.         move.l    4(a3),d0
  629.         beq.s    .EOF            *EOF occured
  630.  
  631.         add.l    d0,d6
  632.         sub.l    d0,d7
  633.         bgt.s    .loop            *still bytes left
  634.  
  635. .EOF    * In case of EOF, we don't have to send an additional msg, because
  636.     * the handler already knows that we have reached the end.
  637.         rts
  638.  
  639. .ERROR        move.l    d0,4(a3)        *send error msg
  640.         move.l    d1,8(a3)
  641.         move.l    a3,pnr_Data1(a2)
  642.         move.l    #12,pnr_Length1(a2)
  643.         move.l    a2,a1
  644.         LIBCALL    SendIO
  645.  
  646.         move.l    #ACTION_SEEK,dp_Action(a4) *and reset filepointer
  647.         move.l    d6,dp_Arg2(a4)
  648.         move.l    #OFFSET_CURRENT,dp_Arg3(a4)
  649.         bsr    dopacket
  650.  
  651.         move.l    a2,a1
  652.         LIBCALL    WaitIO
  653.         rts
  654.  
  655. ACT_WRITE
  656.         GETBPTR    (a2)+,a0
  657.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  658.         move.l    (a2),d0
  659.         move.l    d0,dp_Arg3(a4)
  660.         bsr    AllocVec
  661.         move.l    d0,d3
  662.         beq.s    .error_nostore
  663.         move.l    d3,dp_Arg2(a4)
  664.         moveq    #0,d0
  665.         bsr    answerpacket
  666.         move.l    d3,phn_dlbuf(a5)
  667.         move.l    d3,phn_dlbufpt(a5)
  668.         move.l    dp_Arg3(a4),phn_dlbytes(a5)
  669.         rts
  670. .error_nostore
  671.         moveq    #-1,d0
  672.         move.l    #ERROR_OBJECT_TOO_LARGE,d1
  673.         bra    answerpacket
  674.  
  675.  
  676. ACT_WRITEdownload    ;called with phnnode in a5
  677.             ;and a2 *data+4 (must be 'sub'ed with 4)
  678.     IFNE    DEBUG
  679.     lea    ddownloadt(pc),a0
  680.     bsr    dtype
  681.     ENDC
  682.  
  683.         move.l    phn_dlbytes(a5),d2
  684.         move.l    #MAXPACKETSIZE,d3
  685.         cmp.l    d3,d2
  686.         bcc.s    .0
  687.         move.l    d2,d3
  688. .0        lea    -4(a2),a0
  689.         move.l    phn_dlbufpt(a5),a1
  690.         move.l    d3,d0
  691.         move.l    4.w,a6
  692.         LIBCALL    CopyMem
  693.         add.l    d3,phn_dlbufpt(a5)
  694.         sub.l    d3,phn_dlbytes(a5)
  695.         bne.s    .ende
  696.         ; das war das letzte Stück -> jetzt ACTION_WRITE !!
  697.         bsr    dopacket
  698.         bsr    answerpacket
  699.         move.l    phn_dlbuf(a5),a1
  700.         bra    FreeVec
  701. .ende        rts
  702.  
  703. ACT_FINDxxx
  704.         moveq    #fh_SIZEOF,d0
  705.         bsr    AllocVec
  706.         move.l    d0,d3
  707.         move.l    d0,a1
  708.         moveq    #-1,d0
  709.         move.l    d0,fh_Pos(a1)
  710.         move.l    d0,fh_End(a1)
  711.         move.l    (a2)+,dp_Arg2(a4)
  712.         addq.w    #2,a2
  713.         move.l    a2,d0
  714.         lsr.l    #2,d0
  715.         move.l    d0,dp_Arg3(a4)
  716.         move.l    a1,d0
  717.         lsr.l    #2,d0
  718.         move.l    d0,dp_Arg1(a4)
  719.         bsr    dopacket
  720.         tst.w    d0
  721.         beq.s    .return_err
  722.         lsr.l    #2,d3
  723.         move.l    d3,(a3)+
  724.         bra    answerpacket
  725. .return_err    bsr    answerpacket
  726.         move.l    d3,a1
  727.         bra    FreeVec
  728.  
  729. ACT_END
  730.         GETBPTR    (a2),a0
  731.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  732.         bsr    dopacket
  733.         bsr    answerpacket
  734.         GETBPTR    (a2),a1
  735.         bra    FreeVec
  736.  
  737. ACT_SEEK
  738.         GETBPTR    (a2)+,a0
  739.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  740.         move.l    (a2)+,dp_Arg2(a4)
  741.         move.l    (a2),dp_Arg3(a4)
  742.         bsr    dopacket
  743.         bra    answerpacket
  744.  
  745. ACT_FORMAT
  746.         move.l    (a2)+,dp_Arg2(a4)
  747.         addq.w    #2,a2
  748.         move.l    a2,d0
  749.         lsr.l    #2,d0
  750.         move.l    d0,dp_Arg1(a4)
  751.         bsr    dopacket
  752.         bra    answerpacket
  753.  
  754. ACT_MAKE_LINK
  755.         move.l    (a2)+,d2
  756.         move.l    d2,dp_Arg4(a4)
  757.         move.l    (a2)+,dp_Arg1(a4)
  758.         cmp.l    #LINK_HARD,d2
  759.         beq.s    .hardlink
  760. .softlink    move.l    a2,dp_Arg3(a4)
  761.         lea    256+2(a2),a2
  762.         bra.s    .doit
  763. .hardlink    move.l    (a2)+,dp_Arg3(a4)
  764.         addq.w    #2,a2
  765. .doit        move.l    a2,d0
  766.         lsr.l    #2,d0
  767.         move.l    d0,dp_Arg2(a4)
  768.         bsr    dopacket
  769.         bra    answerpacket
  770.  
  771. ACT_SET_FILE_SIZE
  772.         GETBPTR    (a2)+,a0
  773.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  774.         move.l    (a2)+,dp_Arg2(a4)
  775.         move.l    (a2),dp_Arg3(a4)
  776.         bsr    dopacket
  777.         bra    answerpacket
  778.  
  779. ACT_WRITE_PROTECT
  780.         move.l    (a2)+,dp_Arg1(a4)
  781.         move.l    (a2),dp_Arg2(a4)
  782.         bsr    dopacket
  783.         bra    answerpacket
  784.  
  785. ACT_READ_LINK
  786.         move.l    (a2)+,dp_Arg1(a4)
  787.         move.l    (a2)+,dp_Arg4(a4)
  788.         move.l    a2,dp_Arg2(a4)
  789.         move.l    a3,dp_Arg3(a4)
  790.         add.l    dp_Arg4(a4),a3
  791.         bsr    dopacket
  792.         bra    answerpacket
  793.  
  794. ACT_FH_FROM_LOCK
  795.         moveq    #fh_SIZEOF,d0
  796.         bsr    AllocVec
  797.         move.l    d0,d3
  798.         move.l    d0,a1
  799.         moveq    #-1,d0
  800.         move.l    d0,fh_Pos(a1)
  801.         move.l    d0,fh_End(a1)
  802.         move.l    (a2)+,dp_Arg2(a4)
  803.         move.l    d3,d0
  804.         lsr.l    #2,d0
  805.         move.l    d0,dp_Arg1(a4)
  806.         bsr    dopacket
  807.         tst.w    d0
  808.         beq.s    .return_err
  809.         lsr.l    #2,d3
  810.         move.l    d3,(a3)+
  811.         bra    answerpacket
  812. .return_err    bsr    answerpacket
  813.         move.l    d3,a1
  814.         bra    FreeVec
  815.  
  816. ACT_CHANGE_MODE
  817.         move.l    (a2)+,d2
  818.         move.l    d2,dp_Arg1(a4)
  819.         cmp.l    #CHANGE_LOCK,d2
  820.         beq.s    .change_lock
  821. .change_fh    GETBPTR    (a2)+,a0
  822.         move.l    fh_Arg1(a0),dp_Arg2(a4)
  823.         bra.s    .cont
  824. .change_lock    move.l    (a2)+,dp_Arg2(a4)
  825. .cont        move.l    (a2),dp_Arg3(a4)
  826.         bsr    dopacket
  827.         cmp.l    #CHANGE_LOCK,d2
  828.         bne.s    .0
  829.         GETBPTR    dp_Arg2(a4),a2
  830.         move.l    fl_Access(a2),(a3)+
  831. .0        bra    answerpacket
  832.  
  833. ACT_COPY_DIR_FH
  834.         bra    ACT_PARENT_FH
  835.  
  836. ACT_PARENT_FH
  837.         GETBPTR    (a2),a0
  838.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  839.         bsr    dopacket
  840.         tst.l    d0
  841.         beq.s    .return
  842.         move.l    d0,a0
  843.         add.l    a0,a0
  844.         add.l    a0,a0
  845.         move.l    fl_Volume(a0),(a3)+
  846.         move.l    fl_Access(a0),(a3)+
  847. .return        bra    answerpacket
  848.  
  849. ACT_LOCK_RECORD
  850.         GETBPTR    (a2)+,a0
  851.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  852.         move.l    (a2)+,dp_Arg2(a4)
  853.         move.l    (a2)+,dp_Arg3(a4)
  854.         move.l    (a2)+,dp_Arg4(a4)
  855.         move.l    (a2),dp_Arg5(a4)
  856.         bsr    dopacket
  857.         bra    answerpacket
  858.  
  859. ACT_FREE_RECORD
  860.         GETBPTR    (a2)+,a0
  861.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  862.         move.l    (a2)+,dp_Arg2(a4)
  863.         move.l    (a2),dp_Arg3(a4)
  864.         bsr    dopacket
  865.         bra    answerpacket
  866.  
  867. ACT_ADD_NOTIFY
  868.         bra    ACT_NIL
  869.  
  870. ACT_REMOVE_NOTIFY
  871.         bra    ACT_NIL
  872.  
  873. ACT_SERIALIZE_DISK
  874.         bsr    dopacket
  875.         bra    answerpacket
  876.  
  877. ACT_INHIBIT    move.l    (a2)+,dp_Arg1(a4)
  878.         bsr    dopacket
  879.         bra    answerpacket
  880.  
  881. ACT_INFO
  882.         move.l    (a2)+,d4
  883.         moveq    #id_SIZEOF,d0
  884.         bsr    AllocVec
  885.         move.l    d0,a2
  886.         move.l    a2,d3
  887.         lsr.l    #2,d0
  888.         move.l    d0,dp_Arg2(a4)
  889.         move.l    d4,dp_Arg1(a4)
  890.         bsr    dopacket
  891.         tst.w    d0
  892.         beq.s    .return
  893.         moveq    #8,d2
  894. .1        move.l    (a2)+,(a3)+
  895.         dbra    d2,.1
  896. .return        bsr    answerpacket
  897.         move.l    d3,a1
  898.         bra    FreeVec
  899.  
  900. ACT_DISK_INFO
  901.         moveq    #id_SIZEOF,d0
  902.         bsr    AllocVec
  903.         move.l    d0,a2
  904.         move.l    a2,d3
  905.         lsr.l    #2,d0
  906.         move.l    d0,dp_Arg1(a4)
  907.         bsr    dopacket
  908.         tst.w    d0
  909.         beq.s    .return
  910.         moveq    #8,d2
  911. .1        move.l    (a2)+,(a3)+
  912.         dbra    d2,.1
  913. .return        bsr    answerpacket
  914.         move.l    d3,a1
  915.         bra    FreeVec
  916.  
  917. ACT_CURRENT_VOLUME
  918.         GETBPTR    (a2),a0
  919.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  920.         bsr    dopacket
  921.         move.l    d0,(a3)+
  922.         bra    answerpacket
  923.  
  924. ACT_NEWHANDLER
  925. ; -- has other side been reset?? --> current portnumber will be
  926. ; -- associated with a PHN in A5 !!
  927.         move.l    a5,d1
  928.         beq.s    .oki
  929.         * here we have to free all PNSHandlerNodes !!
  930.  
  931.     IFNE    DEBUG
  932.     lea    dresett(pc),a0
  933.     bsr    dtype
  934.     ENDC
  935.  
  936.         movem.l    a2/a3/d2/d3,-(sp)
  937.         move.l    HandlerList(pc),a2
  938. .freeloop    move.l    phn_packet(a2),a0
  939.         sub.l    #sp_Pkt,a0
  940.         bsr    DeleteStdPacket    ;wichtig, da Signalbit freigegeben
  941.         move.l    a2,a1        ;werden muß
  942.         move.l    (a2),a2
  943.         bsr    FreeVec
  944.         move.l    a2,d0
  945.         bne.s    .freeloop
  946.         movem.l    (sp)+,a2/a3/d2/d3
  947.         sub.l    a5,a5
  948.         clr.l    HandlerList ;<<-- hatte ich mal vergessen :(
  949.  
  950. ; -- everything OK now.
  951. .oki        move.l    a2,d1
  952.     IFNE    DEBUG
  953.     lea    daccesst(pc),a0
  954.     bsr    dtype
  955.     move.l    d1,a0
  956.     bsr    dtype
  957.     bsr    dcr
  958.     ENDC
  959.  
  960.         move.l    dosbase(pc),a6
  961.         LIBCALL    DeviceProc
  962.         move.l    d0,d6        ;Handler-ProcessID finden
  963.         beq.s    .error
  964.         move.l    a2,a0
  965. .1        cmp.b    #":",(a2)+
  966.         bne.s    .1
  967.         clr.b    -(a2)
  968.         bsr    FindDosNode
  969.         move.l    d0,d5
  970.         beq.s    .error
  971.         move.l    #phn_SIZEOF,d0
  972.         bsr    AllocVec
  973.         tst.l    d0
  974.         beq.s    .error
  975.         move.l    d0,a2
  976.         move.l    d5,phn_devnode(a2)
  977.         move.w    d2,phn_port(a2)
  978.         move.l    d6,phn_handlerID(a2)
  979.         bsr    CreateStdPacket
  980.         tst.l    d0
  981.         beq.s    .error
  982.         add.l    #sp_Pkt,d0
  983.         move.l    d0,phn_packet(a2)
  984.         lea    HandlerList(pc),a0
  985.         move.l    (a0),phn_next(a2)
  986.         move.l    a2,(a0)
  987.         moveq    #0,d0
  988.         bsr    answerpacket
  989.     IFNE    DEBUG
  990.     lea    dokt(pc),a0
  991.     bsr    dtype
  992.     ENDC
  993.         bra    MsgDiskIns    ;akt. Volumenode erstellen..
  994. .error        moveq    #-1,d0
  995.         bra    answerpacket
  996.  
  997. ; -- Do Packet and Return Results
  998. dopacket    ; a5 *PNSHandlerNode
  999.         move.l    phn_handlerID(a5),a0
  1000.         move.l    phn_packet(a5),a1
  1001.         sub.w    #sp_Pkt,a1    ;Zeiger zurückdrehen auf Msg-
  1002.         bra    SyncStdPkt    ;Struktur..
  1003.  
  1004. answerpacket    ; d0 Result1
  1005.         ; d1 Result2
  1006.         ; a3 *end of sendbuf
  1007.         lea    sendbuf,a0
  1008.         movem.l    d0/d1,4(a0)
  1009.         move.l    4.w,a6
  1010.         move.l    pronetio(pc),a1
  1011.         sub.l    a0,a3
  1012.         move.l    a0,pnr_Data1(a1)
  1013.         move.l    a3,pnr_Length1(a1)
  1014.         LIBCALL    DoIO
  1015.         rts
  1016.  
  1017. ****************************************************************************
  1018.  
  1019. ; -- Find DLT_DEVICE entry in DosList with dol_Name = [a0]
  1020. FindDosNode    ; a0 *devicename
  1021.         ; RETURNS d0 *DosList or NULL
  1022.         movem.l    d6/a2/a5/a6,-(sp)
  1023.         moveq    #0,d6
  1024.         move.l    a0,a2
  1025.         move.l    4.w,a6
  1026.         LIBCALL    Forbid
  1027.         move.l    dosbase(pc),a5
  1028.         move.l    dl_Root(a5),a5
  1029.         move.l    rn_Info(a5),a5
  1030.         add.l    a5,a5
  1031.         add.l    a5,a5
  1032.         addq.w    #di_DevInfo,a5
  1033. .loop        move.l    (a5),d0
  1034.         beq.s    .ende
  1035.         add.l    d0,d0
  1036.         add.l    d0,d0
  1037.         move.l    d0,a5
  1038.         move.l    dol_Type(a5),d0        ;DLT_DEVICE ?
  1039.         bne.s    .loop
  1040.         move.l    dol_Name(a5),a0
  1041.         add.l    a0,a0
  1042.         add.l    a0,a0
  1043.         addq.w    #1,a0
  1044.         move.l    a2,a1
  1045.         bsr    CompareStrings
  1046.         tst.w    d0
  1047.         bne.s    .loop
  1048.         ;gefunden !
  1049.         move.l    a5,d6
  1050. .ende        LIBCALL    Permit
  1051.         move.l    d6,d0
  1052.         movem.l    (sp)+,d6/a2/a5/a6
  1053.         rts
  1054.  
  1055. ; -- Find DLT_VOLUME entry in DosList with dol_Task = a0
  1056. FindVolume    ; a0 *HandlerID
  1057.         ; RETURNS d0 *DosList or NULL
  1058.         movem.l    d6/a2/a5/a6,-(sp)
  1059.         moveq    #0,d6
  1060.         move.l    a0,a2
  1061.         move.l    4.w,a6
  1062.         LIBCALL    Forbid
  1063.         move.l    dosbase(pc),a5
  1064.         move.l    dl_Root(a5),a5
  1065.         move.l    rn_Info(a5),a5
  1066.         add.l    a5,a5
  1067.         add.l    a5,a5
  1068.         addq.w    #di_DevInfo,a5
  1069. .loop        move.l    (a5),d0
  1070.         beq.s    .ende
  1071.         add.l    d0,d0
  1072.         add.l    d0,d0
  1073.         move.l    d0,a5
  1074.         cmp.l    #DLT_VOLUME,dol_Type(a5)
  1075.         bne.s    .loop
  1076.         cmp.l    dol_Task(a5),a2
  1077.         bne.s    .loop
  1078.         ;gefunden !
  1079.         move.l    a5,d6
  1080. .ende        LIBCALL    Permit
  1081.         move.l    d6,d0
  1082.         movem.l    (sp)+,d6/a2/a5/a6
  1083.         rts
  1084.  
  1085. ; -- Compare two null-terminated strings. Case-insensitive
  1086. CompareStrings    ; a0 *String1
  1087.         ; a1 *String2
  1088.         ; RETURNS d0 = 0 --> Strings equal
  1089.         move.l    d2,-(sp)
  1090.         moveq    #-1,d0
  1091. .loop        move.b    (a0)+,d1
  1092.         move.b    (a1)+,d2
  1093.         bclr    #5,d1
  1094.         bclr    #5,d2
  1095.         cmp.b    d1,d2
  1096.         bne.s    .ende
  1097.         tst.b    d1
  1098.         bne.s    .loop
  1099.         moveq    #0,d0
  1100. .ende        move.l    (sp)+,d2
  1101.         rts
  1102.  
  1103. ; -- AllocVec on Kick1.3 - requirements fixed to PUBLIC|CLEAR
  1104. AllocVec    ; d0 bytesize
  1105.         movem.l    d2/a6,-(sp)
  1106.         move.l    4.w,a6
  1107.         addq.l    #4,d0
  1108.         move.l    d0,d2
  1109.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1110.         LIBCALL    AllocMem
  1111.         tst.l    d0
  1112.         beq.s    .nomem
  1113.         move.l    d0,a0
  1114.         move.l    d2,(a0)+
  1115.         move.l    a0,d0
  1116. .nomem        movem.l    (sp)+,d2/a6
  1117.         rts
  1118.  
  1119. ; -- FreeVec
  1120. FreeVec        ; a1 memory-block
  1121.         move.l    a6,-(sp)
  1122.         move.l    4.w,a6
  1123.         move.l    -(a1),d0
  1124.         LIBCALL    FreeMem
  1125.         move.l    (sp)+,a6
  1126.         rts
  1127.  
  1128. dec2long    ; konvertiert Dezimalstring ab (a0) zu Longword in D1 !!
  1129.         moveq    #0,d1
  1130. .loop        moveq    #0,d0
  1131.         move.b    (a0)+,d0
  1132.         sub.b    #"0",d0
  1133.         cmp.b    #9,d0
  1134.         bhi.s    .oki
  1135.         move.l    d1,d2
  1136.         lsl.l    #3,d1
  1137.         add.l    d2,d1
  1138.         add.l    d2,d1
  1139.         add.l    d0,d1
  1140.         bra.s    .loop
  1141. .oki        rts
  1142.  
  1143. ***************************************************************************
  1144. ; -- Spezielle Sachen, die nichts mit dem Netzwerk zu tun haben, sondern
  1145. ; -- für pronet-run und pronet-page gedacht sind !!!!
  1146.  
  1147. ; in a2 data nach dp_Action..
  1148. ACT_RUN
  1149.         move.l    dosbase(pc),a6
  1150.         move.l    a2,d1
  1151.         moveq    #0,d2
  1152.         moveq    #0,d3
  1153.         jsr    -222(a6)
  1154.         rts
  1155.  
  1156. ACT_PAGE
  1157.         move.l    4.w,a6
  1158.         lea    intname(pc),a1
  1159.         moveq    #0,d0
  1160.         jsr    -552(a6)
  1161.         move.l    d0,a6
  1162.         lea    sendbuf,a3
  1163.         lea    .tex1(pc),a0
  1164. .1        move.b    (a0)+,(a3)+
  1165.         bpl.s    .1
  1166.         move.b    #0,(a3)+
  1167.         move.b    #20,(a3)+
  1168.         move.b    #25,(a3)+
  1169. .2        move.b    (a2)+,d0
  1170.         cmp.b    #$0a,d0
  1171.         beq.s    .3
  1172.         move.b    d0,(a3)+
  1173.         bra.s    .2
  1174. .3        clr.b    (a3)+
  1175.         clr.b    (a3)+
  1176.         lea    sendbuf,a0
  1177.         moveq    #0,d0
  1178.         moveq    #40,d1
  1179.         LIBCALL    DisplayAlert
  1180.         move.l    a6,a1
  1181.         move.l    4.w,a6
  1182.         jsr    -414(a6)
  1183.         rts
  1184.  
  1185. .tex1        dc.b    0,20,15,"pronet-page message:",0,-1
  1186.         even
  1187.  
  1188.         include    "A:ProNET/source/dospackets.s"
  1189.         include    "A:ProNET/source/devio.s"
  1190.  
  1191.     IFNE    DEBUG
  1192.         include    "A:OSdebugging.s"
  1193. dwaitt    dc.b    "Waiting for signals..",10,0
  1194. ddownloadt    dc.b    "**DOWNLOAD**",10,0
  1195. dresett        dc.b    27,"c** RESET **",10,0
  1196. daccesst    dc.b    "NEWHANDLER requires access to ",0
  1197. dokt        dc.b    "!access possible!",10,0
  1198. dreadt        dc.b    "ACT_READ: ",0
  1199.     even
  1200.     ENDC
  1201. ;----------------------------------------------------------------------------
  1202.  
  1203. dosname        dc.b    "dos.library",0
  1204. intname        dc.b    "intuition.library",0
  1205. pronetname    dc.b    "pronet.device",0
  1206. inputname    dc.b    "input.device",0
  1207. starttext    dc.b    "ProNET V2 by Michael Krause - Server active..",10
  1208. starttextl    equ    *-starttext
  1209. procname    dc.b    "ProNET-Server"
  1210.         even
  1211.  
  1212. unit        dc.l    0
  1213. ourtask        dc.l    0
  1214. dosbase        dc.l    0
  1215. pronetio    dc.l    0
  1216. inputio        dc.l    0
  1217. pronetmsgport    dc.l    0
  1218. actpronetmsg    dc.l    0
  1219. HandlerList    dc.l    0    ;einfache Liste mit allen Handlers, die
  1220.                 ;an uns hängen..
  1221.  
  1222.         section    b,bss
  1223.  
  1224. sendbuf        ds.b    $4000
  1225. workfib        ds.b    fib_SIZEOF
  1226.